{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import  pyplot as plt\n",
    "from sklearn.neural_network import MLPClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 以线性不可分数据进行测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def creat_data_no_linear_2d(n):\n",
    "        '''\n",
    "        创建二维的线性不可分数据集\n",
    "\n",
    "        :param n: 负例的数量\n",
    "        :return: 线性不可分数据集，数据集大小为 2*n+n/10 （ n/10 是误差点的数量，误差点导致了线性不可分）\n",
    "        '''\n",
    "        np.random.seed(1)\n",
    "        x_11=np.random.randint(0,100,(n,1)) #  第一组：第一维坐标值\n",
    "        x_12=10+np.random.randint(-5,5,(n,1,))#  第一组：第二维坐标值\n",
    "        x_21=np.random.randint(0,100,(n,1))#  第二组：第一维坐标值\n",
    "        x_22=20+np.random.randint(0,10,(n,1))#  第二组：第二维坐标值\n",
    "\n",
    "        x_31=np.random.randint(0,100,(int(n/10),1))#  第三组：第一维坐标值\n",
    "        x_32=20+np.random.randint(0,10,(int(n/10),1))#  第三组：第二维坐标值\n",
    "\n",
    "        new_x_11=x_11*np.sqrt(2)/2-x_12*np.sqrt(2)/2## 沿第一维轴旋转45度\n",
    "        new_x_12=x_11*np.sqrt(2)/2+x_12*np.sqrt(2)/2## 沿第一维轴旋转45度\n",
    "        new_x_21=x_21*np.sqrt(2)/2-x_22*np.sqrt(2)/2## 沿第一维轴旋转45度\n",
    "        new_x_22=x_21*np.sqrt(2)/2+x_22*np.sqrt(2)/2## 沿第一维轴旋转45度\n",
    "        new_x_31=x_31*np.sqrt(2)/2-x_32*np.sqrt(2)/2## 沿第一维轴旋转45度\n",
    "        new_x_32=x_31*np.sqrt(2)/2+x_32*np.sqrt(2)/2## 沿第一维轴旋转45度\n",
    "\n",
    "        plus_samples=np.hstack([new_x_11,new_x_12,np.ones((n,1))]) # 拼接成正例数据集\n",
    "        minus_samples=np.hstack([new_x_21,new_x_22,-np.ones((n,1))])# 拼接成负例数据集\n",
    "        err_samples=np.hstack([new_x_31,new_x_32,np.ones((int(n/10),1))])# 拼接成正例数据集，它导致了线性不可分\n",
    "        samples=np.vstack([plus_samples,minus_samples,err_samples]) # 拼接成数据集\n",
    "        np.random.shuffle(samples)  # 混洗数据\n",
    "        return samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_samples_2d(ax,samples):\n",
    "            '''\n",
    "            绘制二维数据集\n",
    "\n",
    "            :param ax: Axes 实例，用于绘制图形\n",
    "            :param samples: 二维数据集\n",
    "            :return: None\n",
    "            '''\n",
    "            Y=samples[:,-1]\n",
    "            position_p=Y==1 ## 正类位置\n",
    "            position_m=Y==-1 ## 负类位置\n",
    "            ax.scatter(samples[position_p,0],samples[position_p,1],\n",
    "                marker='+',label='+',color='b')\n",
    "            ax.scatter(samples[position_m,0],samples[position_m,1],\n",
    "                marker='^',label='-',color='y')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def run_plot_samples_2d():\n",
    "    '''\n",
    "    绘制二维线性不可分数据集\n",
    "\n",
    "    :return: None\n",
    "    '''\n",
    "    fig=plt.figure()\n",
    "    ax=fig.add_subplot(1,1,1)\n",
    "    data=creat_data_no_linear_2d(100) # 生成二维线性不可分数据集\n",
    "    plot_samples_2d(ax,data)\n",
    "    ax.legend(loc='best')\n",
    "    plt.show()\n",
    "\n",
    "run_plot_samples_2d()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_with_MLPClassifier(ax,train_data):\n",
    "        '''\n",
    "        使用 MLPClassifier绘制预测结果\n",
    "\n",
    "        :param ax: Axes 实例，用于绘制图形\n",
    "        :param train_data: 训练数据集\n",
    "        :return: None\n",
    "        '''\n",
    "        train_x=train_data[:,:-1]\n",
    "        train_y=train_data[:,-1]\n",
    "        clf=MLPClassifier(activation='logistic',max_iter=1000)# 构造分类器实例\n",
    "        clf.fit(train_x,train_y) # 训练分类器\n",
    "        print(clf.score(train_x,train_y)) # 查看在训练集上的评价预测精度\n",
    "\n",
    "        ## 用训练好的训练集预测平面上每一点的输出##\n",
    "        x_min, x_max = train_x[:, 0].min() - 1, train_x[:, 0].max() + 2\n",
    "        y_min, y_max = train_x[:, 1].min() - 1, train_x[:, 1].max() + 2\n",
    "        plot_step=1\n",
    "        xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),\n",
    "            np.arange(y_min, y_max, plot_step))\n",
    "        Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "        Z = Z.reshape(xx.shape)\n",
    "        ax.contourf(xx, yy, Z, cmap=plt.cm.Paired)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9523809523809523\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def run_predict_with_MLPClassifier():\n",
    "    '''\n",
    "    用 MLPClassifier 预测线性不可分数据集\n",
    "\n",
    "    :return: None\n",
    "    '''\n",
    "    data=creat_data_no_linear_2d(500) #生成线性不可分数据集\n",
    "    fig=plt.figure()\n",
    "    ax=fig.add_subplot(1,1,1)\n",
    "    predict_with_MLPClassifier(ax,data)\n",
    "    plot_samples_2d(ax,data)\n",
    "    ax.legend(loc='best')\n",
    "    plt.show()\n",
    "\n",
    "run_predict_with_MLPClassifier()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
